package domein.tableModel;

import java.util.HashSet;
import java.util.Observable;
import java.util.Observer;
import java.util.Set;

import javax.swing.table.AbstractTableModel;

import domein.School;
import domein.Student;
import domein.Subject;

public class StudentTableModel extends AbstractTableModel implements Observer, Subject{
	// is luisteraar van overzichtPanel,
	// is subject, luisteraar is Controller 
	
	private School school;
	
	
	private static final String[] KOLOMNAMEN = {"JAAR","RICHTING","NAAM","VOORNAAM"};
	private Set<Observer> observers; // omdat het een eigen gemaakte subject is.

	
	
	public StudentTableModel(School school) {
		this.school = school;
		observers = new HashSet<>();
	}

	@Override
	public int getColumnCount() {
		return KOLOMNAMEN.length;
	}

	@Override
	public int getRowCount() {
		// HIER NIET DE LIJST GEVEN !! aparte methode voor maken !!! 
		return school.aantalStudenten();
	}

	@Override
	public String getColumnName(int kolom)
	{
		return KOLOMNAMEN[kolom];
	}
	
	@Override
	public Object getValueAt(int rij, int kolom) {
		Student student = school.geefStudent(rij);
		switch (kolom) {
		case 0: return student.getJaar();
		case 1: return student.getRichting();
		case 2: return student.getNaam();
		case 3: return student.getVoornaam();
		default:return "";
		}
	}

	@Override
	public void update(Observable o, Object object) {
		Integer index = (Integer) object;
		notifyObserver(school.geefStudent(index));
		
	}
	
	@Override
	public void addObserver(Observer observer) {
		observers.add(observer);
		
	}

	@Override
	public void notifyObserver(Object object) {
		for(Observer observer : observers)
		{
			observer.update(null, object);
		}
	}

	

}
